package com.wsd.music.controller;

import com.alibaba.fastjson.JSONObject;
import com.wsd.music.entity.Singer;
import com.wsd.music.service.SingerService;
import com.wsd.music.utils.Message;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/singer")
public class SingerController {

    @Resource
    SingerService service;

    /**
     * 添加歌手信息
     * @param singer
     * @return
     */
    @PostMapping("/register")
    public Object addSinger(@RequestBody Singer singer) {
        if (null != singer) {
            JSONObject jsonObject = new JSONObject();
            if (service.insert(singer)) {
                // 添加成功
                return Message.simpleMessage("1", "添加成功");
            }
            return Message.simpleMessage("0", "添加失败");
        }
        return null;
    }

    /**
     * 修改歌手信息
     * @param singer
     * @return
     */
    @PostMapping("/update")
    public Object updateSinger(@RequestBody Singer singer) {
        System.out.println(singer);
        if (null != singer) {
            if (service.modify(singer)) {
                // 修改成功
                return Message.simpleMessage("1", "添加成功");
            }
            // 修改失败
            return Message.simpleMessage("0", "添加失败");
        }
        return null;
    }

    /**
     * 通过ID删除歌手
     * @param id
     * @return
     */
    @GetMapping("/delete")
    public Object deleteSingerById(Integer id) {
        if (null != id) {
            return service.delete(id);
        }
        return null;
    }

    /**
     * 通过歌手ID查询歌手信息
     * @param id
     * @return
     */
    @RequestMapping("/selectById")
    public Object selectById(Integer id) {
        if (null != id) {
            return service.selectById(id);
        }
        return null;
    }

    /**
     * 查询所有歌手信息
     * @return
     */
    @RequestMapping("/selectAll")
    public Object selectAll() {
        return service.selectAll();
    }

    /**
     * 根据姓名查询歌手信息
     * @param name
     * @return
     */
    @RequestMapping("/selectByName")
    public Object selectByName(String name) {
        if (null != name) {
            name = name.trim();
            return service.selectSingerByName(name);
        }
        return null;
    }

    /**
     * 根据性别查询歌手信息
     * @param sex
     * @return
     */
    @RequestMapping("/selectBySex")
    public Object selectBySex(Boolean sex) {
        if (null != sex) {
            return selectBySex(sex);
        }
        return null;
    }

    /**
     * 接收上传的头像文件，将头像文件放入文件夹并修改数据库信息
     * @param avatar
     * @param id
     * @return
     */
    @PostMapping("updateSingerPic")
    public Object updateSingerPic(@RequestParam("file") MultipartFile avatar, Integer id) {
        if (null != avatar && null != id) {
            String fileName = System.currentTimeMillis() + avatar.getOriginalFilename();
            // G:\Java\music\img\singerPic
            String filePath = System.getProperty("user.dir") +
                    System.getProperty("file.separator") +
                    "img" +
                    System.getProperty("file.separator") +
                    "singerPic";

            // File类代表磁盘文件本身，操作目录和文件都可以通过File来完成
            File file = new File(filePath);
            if (!file.exists()) {
                // 如果不存在该文件夹，创建一个新的文件夹
                file.mkdir();
            }
            // 实际文件地址
            // G:\Java\music\img\singerPic\{fileName}
            File desk = new File(filePath + System.getProperty("file.separator") + fileName);
            // 将文件存储到指定目录
            try {
                avatar.transferTo(desk);
            } catch (IOException e) {
                return Message.simpleMessage("0", e.getMessage());
            }

            // 更新数据库中的文件
            Singer singer = new Singer();
            singer.setId(id);
            singer.setPic("img" +
                    System.getProperty("file.separator") +
                    "singerPic"+
                    System.getProperty("file.separator") +
                    fileName);
            return service.modify(singer) ?
                    Message.simpleMessage("1", "添加成功") :
                    Message.simpleMessage("0", "添加失败");
        }
        return null;
    }


}
